// utils/request.js
// 设置你的基础 URL

export default {
  /**
   * GET 请求封装
   * @param url 接口路径
   * @param options 额外配置（如是否显示loading）
   */
  async get(url, options = {}) {
    const { showLoading = true } = options;
    if (showLoading) uni.showLoading({ title: '加载中' });

    try {
      const res = await this._request({
        url,
        method: 'GET'
      });
      return Promise.resolve(res);
    } catch (err) {
      uni.$u.toast('请求失败');
      return Promise.reject(err);
    } finally {
      if (showLoading) uni.hideLoading();
    }
  },

  /**
   * POST 请求封装
   * @param url 接口路径
   * @param data 请求体数据
   * @param options 额外配置
   */
  async post(url, data, options = {}) {
    const { showLoading = true } = options;
    if (showLoading) uni.showLoading({ title: '提交中' });

    try {
      const res = await this._request({
        url,
        method: 'POST',
        data
      });
      return Promise.resolve(res);
    } catch (err) {
      uni.$u.toast('提交失败');
      return Promise.reject(err);
    } finally {
      if (showLoading) uni.hideLoading();
    }
  },

  // 使用 uni.request 原生请求方法
  _request({ url, method = 'GET', data = {} }) {
    return new Promise((resolve, reject) => {
      uni.request({
        url: url.startsWith('http') ? url : `${'http://localhost:8083'}${url}`,
        method,
        data,
        header: {
          'content-type': method === 'GET' ? 'application/json' : 'application/json'
        },
        success: (res) => {
          if (res.statusCode >= 200 && res.statusCode < 300) {
            resolve(res.data);
          } else {
            reject(new Error(`网络异常 ${res.statusCode}`));
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  }
}